GraphQL fragments
是可以共享的查询逻辑
1 | fragment NameParts on Person { |
在 Apollo中 fragment 有两个主要的用法:
- 在多个查询,突变或订阅中共享字段
- Breaking your queries up to allow you to co-locate field access with the places they are used.
Reusing Fragments
直接的用法就是重用片段
1 | import gql from 'graphql-tag'; |
需要使用 fragment 时, 简单的使用...Name
语法. 在查询文档中嵌入
1 | const SUBMIT_COMMENT_MUTATION = gql` |
Colocating Fragments
GraphQL的一个好处是, 响应数据天然是树形结构,在很多实例中, 和组件的层级关系形成映射.由此,结合GraphQL对 fragment 的支持,可以按照对应结构对查询做出分割.
例如在GitHunt 中构建FeedPage
实例,有如下的层级结构
1 | FeedPage |
FeedPage
执行一个查询获取Entry
列表.每个子组件需要Entry
的不同字段.
graphql-anywhere
包提供的工具可以构建出子组件需要的所有字段的查询,从而让你轻松的传递所有组件需要确切字段
Creating Fragments
再次使用gql
助手,添加子字段
1 | VoteButtons.fragments = { |
如果片段包含有子片段, 使用gql
助手传递
1 | FeedEntry.fragments = { |
Filtering With Fragments
在字段传递给子组件的时候,也可是过滤出确切的字段
1 | import { filter } from 'graphql-anywhere'; |
filter()
会从 entry
中得到确切的字段
使用 Webpack 导入 fragments
在使用graphql-tag/loader
导入.graphql
文件时,可以使用import
,
1 | #import "./someFragments.graphql" |